|
(******************************************************************************)
(**) ОТДЕЛ Слова;
(******************************************************************************)
(* НАЗНАЧЕНИЕ: основные задачи для ОберГла.отд *)
(******************************************************************************)
ИСПОЛЬЗУЕТ
Читать ИЗ "...\Отделы\Обмен\",
Писать ИЗ "...\Отделы\Обмен\",
Знак ИЗ "...\Отделы\Иное\",
Буква ИЗ "...\Отделы\Иное\",
Цепь ИЗ "...\Отделы\Иное\",
Ряд ИЗ "...\Отделы\Иное\";
ПОСТ
ЗапасСлов=100; (* запас ключевых слов *)
ДлСлова=32; (* наибольшая длина слова *)
ВИД
(* Слово Глагола и соответствующее ему слово языка Оберон *)
ВСлово=НАБОР(Ряд.Вид)
г,о:ЦЕПЬ[ДлСлова]
КОН;
ДСлово=ДОСТУП К ВСлово;
ПЕР
слова:РЯД ЗапасСлов ИЗ Ряд.Доступ; (* ключевые слова *)
слов:ЦЕЛ; (* число ключевых слов *)
(******************************************************************************)
ЗАДАЧА Сравнить(с1-,с2-:Ряд.Вид):ЦЕЛ;
УКАЗ
ВОЗВРАТ Цепь.Сравнить(с1(ВСлово).о,с2(ВСлово).о)
КОН Сравнить;
(******************************************************************************)
ЗАДАЧА Перевод-(ч:Читать.Поток; п:Писать.Поток);
ПЕР
з:ЗНАК; (* следующий знак *)
слово:ВСлово; (* пробное слово *)
нашли:Ряд.Доступ;
ЗАДАЧА Пропуск; (* Пропуск знака без обработки *)
УКАЗ
Писать.ЗнакЦепи(п,з);
з:=Читать.ЗнакЦепи(ч)
КОН Пропуск;
ЗАДАЧА ЧитатьСлово(ц+:ЦЕПЬ); (* Чтение слова в цепочку знаков *)
ПЕР
п:ЦЕЛ; (* позиция для чтения в цепочку *)
УКАЗ
п:=0;
ПОВТОРЯТЬ
ЕСЛИ п < ДлСлова-1 ТО
ц[п]:=з;
УВЕЛИЧИТЬ(п)
КОН;
з:=Читать.ЗнакЦепи(ч)
ДО НЕ Знак.ВСлове(з);
ц[п]:=0X
КОН ЧитатьСлово;
УКАЗ
з:=Читать.ЗнакЦепи(ч);
ПОКА НЕ Читать.Конец(ч) ВЫП
ПОКА (НЕ Читать.Конец(ч)) И (з <= " ") ВЫП
Пропуск
КОН;
ЕСЛИ Буква.Известная(з) ИЛИ (з = "_") ТО
ЧитатьСлово(слово.о);
нашли:=Ряд.Поиск(слово,слова,слов,Сравнить);
ЕСЛИ нашли # ПУСТО ТО
Писать.Цепь(п,нашли(ДСлово).г)
ИНАЧЕ
Писать.Цепь(п,слово.о)
КОН
АЕСЛИ з = "&" ТО
Писать.ЗнакЦепи(п,"И");
з:=Читать.ЗнакЦепи(ч);
ЕСЛИ Знак.ВСлове(з) ТО Писать.ЗнакЦепи(п," ") КОН
АЕСЛИ з = "~" ТО
Писать.Цепь(п,"НЕ");
з:=Читать.ЗнакЦепи(ч);
ЕСЛИ Знак.ВСлове(з) ТО Писать.ЗнакЦепи(п," ") КОН
ИНАЧЕ
Пропуск
КОН
КОН;
КОН Перевод;
(******************************************************************************)
ЗАДАЧА ВводСл(г-,о-:ЦЕПЬ);
ПЕР
слово:ДСлово;
УКАЗ
СОЗДАТЬ(слово);
СПИСАТЬ(о,слово.о);
СПИСАТЬ(г,слово.г);
Ряд.Вставка(слово,слова,слов,Сравнить)
КОН ВводСл;
(******************************************************************************)
УКАЗ
слов:=0;
ВводСл("АЕСЛИ", "ELSIF");
ВводСл("БЕГУНОК", "RIDER");
ВводСл("В", "IN");
ВводСл("ВИД", "TYPE");
ВводСл("ВОЗВРАТ", "RETURN");
ВводСл("ВЫБРАТЬ", "CASE");
ВводСл("ВЫП", "DO");
ВводСл("ВЫХОД", "EXIT");
ВводСл("ДЕЛИТЬ", "DIV");
ВводСл("ДЛЯ", "WITH");
ВводСл("ДО", "UNTIL");
ВводСл("ДОСТУП", "POINTER");
ВводСл("ЕСЛИ", "IF");
ВводСл("ЯВЛЯЕТСЯ", "IS");
ВводСл("ЗАДАЧА", "PROCEDURE");
ВводСл("И", "&");
ВводСл("ИЗ", "OF");
ВводСл("ИЛИ", "OR");
ВводСл("ИНАЧЕ", "ELSE");
ВводСл("ИСПОЛЬЗУЕТ","IMPORT");
ВводСл("К", "TO");
ВводСл("КОЛЬЦО", "LOOP");
ВводСл("КОН", "END");
ВводСл("НАБОР", "RECORD");
ВводСл("НЕ", "~");
ВводСл("ОСТАТОК", "MOD");
ВводСл("ОТ", "FOR");
ВводСл("ОТДЕЛ", "MODULE");
ВводСл("ПЕР", "VAR");
ВводСл("ПО", "BY");
ВводСл("ПОВТОРЯТЬ", "REPEAT");
ВводСл("ПОКА", "WHILE");
ВводСл("ПОСТ", "CONST");
ВводСл("ПУСТО", "NIL");
ВводСл("РЯД", "ARRAY");
ВводСл("ТО", "THEN");
ВводСл("УКАЗ", "BEGIN");
ВводСл("ВЕЩ", "REAL");
ВводСл("ВЗНАК", "CHR");
ВводСл("ВЦЕЛ", "ORD");
ВводСл("ВШИРЦЕЛ", "ENTIER");
ВводСл("ВКЛ", "TRUE");
ВводСл("РАЗМЕР", "LEN");
ВводСл("ЗНАК", "CHAR");
ВводСл("КЛЮЧ", "BOOLEAN");
ВводСл("МАКС", "MAX");
ВводСл("МИН", "MIN");
ВводСл("МНОЖ", "SET");
ВводСл("МОДУЛЬ", "ABS");
ВводСл("НЕ ЧЕТ", "ODD");
ВводСл("ОТКЛ", "FALSE");
ВводСл("ПРОВЕРИТЬ", "ASSERT");
ВводСл("СОЗДАТЬ", "NEW");
ВводСл("СПИСАТЬ", "COPY");
ВводСл("СТОП", "HALT");
ВводСл("УВЕЛИЧИТЬ", "INC");
ВводСл("УЗК", "SHORT");
ВводСл("УЗКЦЕЛ", "SHORTINT");
ВводСл("УМЕНЬШИТЬ", "DEC");
ВводСл("ЦЕЛ", "INTEGER");
ВводСл("ШИРЦЕЛ", "LONGINT");
ВводСл("ШИРВЕЩ", "LONGREAL");
ВводСл("ОБХОД", "SYSTEM");
ВводСл("Ячейка", "BYTE");
ВводСл("Доступ", "PTR");
ВводСл("Адрес", "ADR");
ВводСл("Значение", "VAL");
ВводСл("ИзПамяти", "GET");
ВводСл("ВПамять", "PUT");
ВводСл("Образ", "MOVE");
КОН Слова.
▲ Вопросы, замечания и предложения высылайте на atimopheyev@yahoo.com или Издателю Глагола:
|
|